EC2にNode.jsをインストールして、ExpressでAPIサーバを作ってみた
こんにちは、ゲームソリューション部のsoraです。
今回は、EC2にNode.jsをインストールして、ExpressでAPIサーバを作ってみたことについて書いていきます。
今回使用するAMIはAmazon Linux2023です。
Node.jsのインストール
まずはNode.jsをインストールします。
sudo dnf update -y
sudo dnf install -y gcc-c++ make
curl -sL https://rpm.nodesource.com/setup_20.x | sudo -E bash -
sudo dnf install -y nodejs
# インストール確認
node --version
v20.17.0
Expressのインストール
次にExpressをインストールします。
プロジェクト初期化時に、デフォルトの場合はindex.js
ですが、index.mjs
に設定しています。
プロジェクト初期化をすることで、package.json
が生成されます。
# ディレクトリ作成
mkdir myexpressapi && cd myexpressapi
# プロジェクトの初期化
npm init
# entry pointだけ入力しました。
package name: (myexpressapi)
version: (1.0.0)
description:
entry point: (index.js) index.mjs
test command:
git repository:
keywords:
author:
license: (ISC)
# Expressのインストール
npm install express
サーバの起動・動作確認
インストールなどの準備が終わったため、実際のコードを書いていきます。
コードの説明はコメントアウトして記載しています。
// expressのインポート
import express from 'express';
// expressインスタンスの作成(サーバ設定やルーティングのために必要)
const app = express();
// app.getは、GETリクエストに対するルートハンドラ
// /apiにアクセスがあったときに実行される
// getのほかにもpostやdeleteなど、それぞれのメソッドに対応したものがある
app.get('/api', (req, res) => {
res.json({ message: 'Hello, World!' });
});
// app.useは、全てのメソッドに対する処理(今回は404エラーハンドリング)
// パスを指定しない場合は、どのルートにもマッチしなかった場合に実行される
// getやuseの条件に複数当てはまる場合は、上から実行されていきnext();があれば実行後に次の処理に移動する
// 前の処理でレスポンスが返されていたり、next();が書いてない場合は、以降が実行されない
app.use((req, res, next) => {
res.status(404).json({ message: 'Not Found' });
});
// サーバの起動、リッスンポートの設定
app.listen(80, () => {
console.log('Server is running on port 80');
});
コードを実行して、APIサーバを起動します。
node index.mjs
今回のようにリッスンポートを80にした場合は、上記のコマンドでは特権ポートでの実行となるため、管理者権限が必要とのエラーが出ました。
ポートを変えるか、管理者として実行することで実行可能です。
sudo node index.mjs
Server is running on port 80
指定したポートとパスで実行すると、app.get
で処理している{ message: 'Hello, World!' }
が表示されました。
最後に
今回は、EC2にNode.jsをインストールして、ExpressでAPIサーバを作ってみたことを記事にしました。
どなたかの参考になると幸いです。